#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <vector>
#include <sys/stat.h>
#include <sys/wait.h>
#include <errno.h>
#include <stdio.h>
// int main()
// {
//     char *const a[] = {"ls", "-a", "-l"};

//     int fd = fork();
//     if (fd == 0)
//     {
//         //std::cout << "i am child process" << std::endl;
//         printf("i am child process");
//         execv(a[0], a);
//         sleep(5);
//     }
//     int status = 0;
//     waitpid(fd, &status, 0);
//     printf("%d,%d", status && 0XFFFFFFFF, (status >> 8) && 0XFFFFFFFF);
//     return 0;
// }

// void sigcb(int sig)
// {
//     std::cout<<"捕捉信号："<<sig<<std::endl;
//     exit(0);
// }
// void printfsigpending(sigset_t *p)
// {
//     for(int i=63;i>0;i--)
//     {
//         if(sigismember(p,i))
//             printf("1");
//         else
//             printf("0");
//     }
//     printf("\n");
// }
// int main()
// {
//     //signal(SIGINT,sigcb);
//     //struct sigaction act,oact;
//     //sigaction(SIGINT,&act,&oact);
//     sigset_t set,oset,p;
//     sigemptyset(&set);
//     sigemptyset(&oset);
//     sigaddset(&set,2);
//     sigaddset(&set,40);
//     sigprocmask(SIG_SETMASK,&set,&oset);
//     while(true)
//     {
//         sigpending(&p);
//         printfsigpending(&p);
//         sleep(1);
//     }
// }
#include <fcntl.h>

// int main()
// {
//     //mkfifo("fgo.txt", 0666);
//     int id = fork();
//     if (id == 0)
//     {
//         int fd = open("fgo.txt", O_WRONLY);
//         char buf[] = "i am process A";
//         write(fd, buf, sizeof(buf));
//         close(fd);
//     }
//     int fd = open("fgo.txt", O_RDONLY);
//     char buf[1024];
//     int n;
//     while (n = read(fd, buf, 1024) > 0)
//     {
//         buf[n] = '\0';
//         printf(buf);
//     }
//     return 0;
// }
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#define FILENAMME "."
#define ID 0x666

int main()
{
    key_t key=ftok(FILENAMME,ID);
    int shmid=shmget(key,1024,IPC_CREAT|IPC_EXCL|0666);
    if(shmid==-1)
        return 0;
    int id =fork();
    if(id==0)
    {
        int _shmid=shmget(key,1024,IPC_CREAT);
        char* _addr=(char*)shmat(_shmid,NULL,0);
        for(int i=0;i<24;i++)
        {
            _addr[i]='a'+i;
        }
        shmdt(_addr);
    }
    char* addr=(char*)shmat(shmid,NULL,0);
    printf("I get data%s\n",addr);
    shmdt(addr);
    return 0;
}